#include <iostream>
#include <string>
#include <memory>
#include <thread>
#include <cstdlib>
#include <unistd.h>
#include "inet.hpp"

namespace tcp
{
class tcp_server : public inet::tcp::server
{
public:
    tcp_server(uint16_t port, int backlog) : inet::tcp::server(port, backlog)
    {}

    void start()
    {
        while (true)
        {
            std::cout << "hang ..." << std::endl;
            sleep(1);
            // int sock = accept();

            // while (true)
            // {
            //     std::string buf;
            //     int s = recv(sock , &buf, 1024);
            //     if (s == 0)
            //     {
            //         std::cout << "client quit" << std::endl;
            //         close(sock);
            //         break;
            //     }
            //     else if (s < 0)
            //     {
            //         std::cout << "recv error" << std::endl;
            //         close(sock);
            //         break;
            //     }
            //     else
            //     {
            //         send(sock, buf);
            //     }
            // }

            // std::thread th([&]() { 
            //     while (true)
            //     {
            //         std::string buf;
            //         int s = recv(sock , &buf, 1024);
            //         if (s == 0)
            //         {
            //             std::cout << "client quit" << std::endl;
            //             sleep(100);
            //         }
            //         else if (s < 0)
            //         {
            //             std::cout << "recv error" << std::endl;
            //             sleep(100);
            //         }
            //         else
            //         {
            //             send(sock, buf);
            //         }
            //     }
            // });
            // th.detach();
        }
    }
};
}

int main(int argc, char* argv[])
{
    if (argc != 3)
    {
        printf("Usage error\n");
        exit(1);
    }
    uint16_t port = std::stoi(argv[1]);
    uint16_t bklg = std::stoi(argv[2]);

    std::unique_ptr<tcp::tcp_server> tsvr(new tcp::tcp_server(port, bklg));
    tsvr->start();

    return 0;
}
